"""
Case Type   : 资源池化
Case Name   : 缩容备一，删除备二的postgresql.conf文件
Create At   : 2024.10
Owner       : chen
Description :
    1.执行缩容备一
    gs_dropnode -U USER -G GROUP -h hostlist
    2.工具交互前删除备二配置文件
    mv postgresql.con postgresql.conf_bak
    3.恢复环境
Expect      :
    1.工具执行成功
    2.成功
    3.成功
"""

import os
import unittest
from testcase.utils.Logger import Logger
from testcase.utils.CommonSH import CommonSH
from testcase.utils.Constant import Constant
from testcase.utils.ComThread import ComThread
from yat.test import Node
from yat.test import macro

class SharedStorage(unittest.TestCase):
    def setUp(self):
        self.log = Logger()
        self.log.info(f'-----{os.path.basename(__file__)} start-----')
        self.pri_comsh = CommonSH('PrimaryDbUser')
        self.constant = Constant()
        self.pri_node = Node('PrimaryDbUser')
        self.sta1_node = Node('Standby1DbUser')
        self.sta2_node = Node('Standby2DbUser')
        self.db_host = self.sta1_node.db_host
        self.s_user = self.pri_node.ssh_user

    def test_shared_storage(self):
        text = f'''-----step1: 执行缩容备一 expect: 工具执行成功-----'''
        self.log.info(text)
        course = ComThread(self.pri_comsh.exec_dropnode, 
            args=(self.sta1_node, macro.DB_ENV_PATH, True,))
        course.setDaemon(True)
        course.start()

        text = f'''-----step2: 工具交互前删除备二配置文件 expect: 成功-----'''
        self.log.info(text)
        cmd = f'''mv {macro.DB_INSTANCE_PATH}/postgresql.conf \
            {macro.DB_INSTANCE_PATH}/postgresql.conf_bak'''
        self.log.info(cmd)
        res = self.sta2_node.sh(cmd).result()
        self.log.info(res)
        course.join()
        res = course.get_result()
        self.assertIn('Some important steps failed to execute', res)

    def tearDown(self):
        text = f'''-----step3: 恢复环境 expect: 成功-----'''
        self.log.info(text)
        cmd = f'''mv {macro.DB_INSTANCE_PATH}/postgresql.conf_bak \
            {macro.DB_INSTANCE_PATH}/postgresql.conf'''
        self.log.info(cmd)
        res = self.sta2_node.sh(cmd).result()
        self.log.info(res)
        self.log.info(f'-----{os.path.basename(__file__)} end-----')